/**************************************************************************** 
 * Meta，一个轻量级的静态分区Hypervisor 
 *
 * 版权(c) , 2022-
 *
 * 作者:
 *      Tupelo Shen <shenwanjiang2013@163.com>
 *
 * Meta是一个自由软件，你可以在遵循GNU GPLv2协议的条件下，重新修改并发布它。
 *
 ***************************************************************************/

#include <config.h>

void config_adjust_to_va(struct config *config, paddr_t phys)
{
    adjust_ptr(config->shmemlist, config);

    for (size_t i = 0; i < config->vmlist_size; i++) {
        adjust_ptr(config->vmlist[i].image.load_addr, phys);

        adjust_ptr(config->vmlist[i].platform.regions, config);

        if(adjust_ptr(config->vmlist[i].platform.devs, config)){
            for (size_t j = 0; j < config->vmlist[i].platform.dev_num; j++) {
                adjust_ptr(config->vmlist[i].platform.devs[j].interrupts, config);
            }
        }

        if(adjust_ptr(config->vmlist[i].platform.ipcs, config)){
            for (size_t j = 0; j < config->vmlist[i].platform.ipc_num; j++) {
                adjust_ptr(config->vmlist[i].platform.ipcs[j].interrupts, config);
            }
        }
    }

    config_arch_adjust_to_va(config, phys);
}

bool config_is_builtin() {
    extern uint8_t _config_start, _config_end;
    return &_config_start != &_config_end;
}